home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / GRAPTIES / SD204.LZH / KEY2.PAS < prev    next >
Pascal/Delphi Source File  |  1980-01-01  |  3KB  |  122 lines

  1. UNIT KEY2;
  2. INTERFACE
  3.  USES IOSTUFF,CRT;
  4.  
  5. VAR
  6.  FunctKey : Boolean;
  7.  HelpEnv  : Integer;
  8.  
  9.  FUNCTION NextKey:Char;
  10.  PROCEDURE SetHelpMax(Max : Integer);
  11.  PROCEDURE HelpLoad(N : Integer; HelpFile : ShortStr);
  12.  
  13. IMPLEMENTATION
  14.  
  15. CONST
  16.    NumScr = 7;
  17.  
  18. VAR
  19.    HelpS      : Array[1..NumScr] of ^screen;
  20.    HelpNam    : Array[1..NumScr] of ShortStr;
  21.    FoundIt    : Array[1..NumScr] of Boolean;
  22.    FileMem    : File;
  23.    NN         : Integer;
  24.    MaxScr     : Integer;
  25.  
  26. {=====================================================================}
  27. PROCEDURE SetHelpMax(Max : Integer);
  28. BEGIN
  29.    MaxScr := Max;
  30. END;
  31.  
  32. {=====================================================================}
  33. PROCEDURE HelpLoad(N : Integer; HelpFile : ShortStr);
  34. BEGIN
  35.    If (N > 0) and (N <= MaxScr) then
  36.    Begin
  37.        FoundIt[N] := True;
  38.        Assign(FileMem,HelpFile);
  39.        {$I-} Reset(FileMem,4000); {$I+}
  40.        If IOresult = 0 then
  41.         Begin
  42.          New(HelpS[N]);
  43.          BlockRead(FileMem,HelpS[N]^,1);
  44.          Close(FileMem);
  45.         End
  46.  
  47.        Else FoundIt[N] := false;
  48.    End;
  49. END; {MemoryLoad}
  50.  
  51. {=====================================================================}
  52. PROCEDURE HelpMsg;
  53. VAR
  54.    SaveRow,SaveCol   : Integer;
  55.    SaveFore,SaveBack : Integer;
  56.    HelpScr           : Integer;
  57.    HelpCh            : Char;
  58.    Funct,ExitHelp    : Boolean;
  59.    SaveAttr          : Byte;
  60. BEGIN
  61.     SaveScreen(3);
  62.     SaveAttr := TextAttr;
  63.     SaveRow := WhereX;
  64.     SaveCol := WhereY;
  65.     HelpScr := HelpEnv;
  66.     ExitHelp := False;
  67.     Repeat
  68.           If FoundIt[HelpScr] then
  69.             Begin
  70.               MovetoScreen(HelpS[HelpScr]^,Video^,4000);
  71.               Display('Hit any key to return.  Or use PgDn/PgUp keys for more help screens.',1,25);
  72.             End
  73.           Else Beep;
  74.           HelpCh := ReadKey;
  75.           If HelpCh <> #0 then Funct := false
  76.             else begin
  77.               HelpCh := ReadKey;
  78.               Funct := True;
  79.             End;
  80.  
  81.           If (Funct) and (HelpCh in [#72,#73,#80,#81])
  82.           then Case HelpCh of
  83.                 #72,#73 : If HelpScr > 1 then Dec(HelpScr)
  84.                                          else HelpScr := MaxScr;
  85.                 #80,#81 : If HelpScr < MaxScr then Inc(HelpScr)
  86.                                          else HelpScr := 1;
  87.               End {case}
  88.           else ExitHelp := true;
  89.     Until ExitHelp;
  90.  
  91.     TextAttr := SaveAttr;
  92.     RestoreScreen(3);
  93.     GoToXY(SaveRow,SaveCol);
  94. END;
  95.  
  96.  
  97. {=====================================================================}
  98. FUNCTION NextKey:Char;
  99. VAR
  100.     NKey : Char;
  101. LABEL
  102.     Start;
  103. BEGIN
  104. Start:Nkey := Readkey;
  105.       If Nkey <> #0 then FunctKey := False
  106.       else
  107.         Begin
  108.           Nkey := Readkey;
  109.           FunctKey := True;
  110.         End;
  111.       If FunctKey and (Nkey = #59) then
  112.       Begin
  113.         HelpMsg;
  114.         GoTo Start;
  115.       End;
  116.       NextKey := NKey;
  117. END;
  118. Begin
  119.   MaxScr := 0;
  120.   For NN := 1 to NumScr do FoundIt[NN] := False;
  121.   HelpEnv := 1;
  122. END.